package com.tt.util;

import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;

/**
 * 
 * @author yuanyang
 * 
 */
public class HandlerUtils {

	private HandlerUtils() {
	}

	private static class Holder {
		public static HandlerUtils instance = new HandlerUtils();
	}

	public static HandlerUtils getInstance() {
		return Holder.instance;
	}

	private Handler mHandler;

	public Handler getNewHandler() {
		Log.e("17kouyu", "getNewHandler===>");
		Looper myLooper = Looper.myLooper();
		Looper mainLooper = Looper.getMainLooper();
		if (myLooper == null) {
			mHandler = new Handler(mainLooper);
		} else {
			mHandler = new Handler(myLooper);
		}
		return mHandler;
	}

	public Handler getNewHandlerCB(final HandlerDispose hd) {
		Log.e("17kouyu", "getNewHandlerCB===>");
		Looper myLooper = Looper.myLooper();
		Looper mainLooper = Looper.getMainLooper();
		if (myLooper == null) {
			mHandler = new Handler(mainLooper) {
				@Override
				public void handleMessage(Message msg) {
					super.handleMessage(msg);
					hd.handleMessage(msg);
				}
			};
		} else {
			mHandler = new Handler(myLooper) {
				@Override
				public void handleMessage(Message msg) {
					super.handleMessage(msg);
					hd.handleMessage(msg);
				}
			};
		}
		return mHandler;
	}

	public Handler getNewChildHandler() {
		Log.e("17kouyu", "getNewChildHandler===>");
		Looper myLooper = Looper.myLooper();
		if (myLooper == null) {
			Looper.prepare();
			mHandler = new Handler(Looper.myLooper());
			Looper.loop();
		} else {
			mHandler = new Handler(myLooper);
		}
		return mHandler;
	}

	public Handler getNewChildHandlerCB(final HandlerDispose hd) {
		Log.e("17kouyu", "getNewChildHandlerCB===>");
		Looper myLooper = Looper.myLooper();
		if (myLooper == null) {
			Looper.prepare();
			mHandler = new Handler() {
				@Override
				public void handleMessage(Message msg) {
					super.handleMessage(msg);
					hd.handleMessage(msg);
				}
			};
			Looper.loop();
		} else {
			mHandler = new Handler(myLooper) {
				@Override
				public void handleMessage(Message msg) {
					super.handleMessage(msg);
					hd.handleMessage(msg);
				}
			};
		}
		return mHandler;
	}

	public Handler getUIHandler() {
		Log.e("17kouyu", "getUIHandler===>");
		if (mHandler != null) {
			if (mHandler.getLooper() == Looper.getMainLooper()) {
				return mHandler;
			}
		}
		return mHandler = new Handler(Looper.getMainLooper());
	}

	public Handler getUIHandlerCB(final HandlerDispose hd) {
		if (mHandler != null) {
            if (mHandler.getLooper() == Looper.getMainLooper()) {
				return mHandler;
            }
        }
        return mHandler= new Handler(Looper.getMainLooper()){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                hd.handleMessage(msg);
            }
        };

//		Looper looper = Looper.myLooper();
//		if(looper == null){
//			Looper.prepare();
//		}
//		return mHandler= new Handler(Looper.myLooper()){
//			@Override
//			public void handleMessage(Message msg) {
//				super.handleMessage(msg);
//				Log.e("17kouyu", "hd.handleMessage===>");
//				hd.handleMessage(msg);
//			}
//		};
	}

	public void UIOnFinish() {
		mHandler = null;
	}

	public interface HandlerDispose {
		public void handleMessage(Message msg);
	}
}
